package com.lovo.project.dao;

import com.lovo.project.model.RoleDO;
import org.apache.ibatis.annotations.Param;

import javax.management.relation.Role;
import java.util.List;

/**
 * @title 用户角色持久层接口
 * @author: yuyuan
 * @date: 2020/11/3 14:14
 */
public interface UserRoleDAO {
    /**
     * 根据用户id查询其所有角色
     * @param userId  用户id
     * @return 角色集合
     */
    List<Integer> selectRoleByUserId(@Param("userId") Integer userId);

    /**
     * 查询所有角色
     * @return 角色集合
     */
    List<RoleDO> selectAllRole();

    /**
     * 根据用户id查询不属于他的所有角色
     * @param userId  用户id
     * @return 角色集合
     */
    List<RoleDO> selectOtherRoleByUserId(@Param("userId")Integer userId);

    /**
     * 根据用户id和角色id删除角色
     * 如果影响行数个数小于list的长度，抛出删除角色异常
     * @param userId 用户id
     * @param roleIdDeleteList 角色id集合
     */
    int deleteRoleByUserIdAndRoleId(@Param("userId")Integer userId,@Param("roleIdDeleteList")List<String> roleIdDeleteList);

    /**
     * 根据用户id和角色id添加角色
     * 如果影响行数个数小于list的长度，抛出添加角色异常
     * @param userId 用户id
     * @param roleIdAddList 角色id集合
     */
    int insertRoleByUserIdAndRoleId(@Param("userId")Integer userId,@Param("roleIdAddList")List<String> roleIdAddList);

    /**
     * 删除指定用户所有角色
     * @param userId 用户id
     */
    void deleteAllRoleByUserId(@Param("userId")Integer userId);
}
